package editorsvg.editor.documento;

import editorsvg.editor.formas.Circulo;
import editorsvg.editor.formas.Elipse;
import editorsvg.editor.formas.Linea;
import editorsvg.editor.formas.Poligono;
import editorsvg.editor.formas.Polilinea;
import editorsvg.editor.formas.Rectangulo;
import editorsvg.editor.formas.Trayecto;

/**
 *
 * @author Jorge Berjano
 */
public enum PrototipoElemento {
    svg(new Documento()),
    line(new ElementoForma(new Linea())),
    circle(new ElementoForma(new Circulo())),
    ellipse(new ElementoForma(new Elipse())),
    rect(new ElementoForma(new Rectangulo())),
    polyline(new ElementoForma(new Polilinea())),
    polygon(new ElementoForma(new Poligono())),
    path(new ElementoForma(new Trayecto())),
    g(new ElementoGrupo()),
    clipPath(new ElementoRecorte()),
    style(new ElementoEstilo()),
    simbolo(new Simbolo()),
    use(new ElementoInstanciaSimbolo());
    
    private ElementoSVG elelemtoPrototipo;
    
    PrototipoElemento(ElementoSVG elemento) {
        this.elelemtoPrototipo = elemento;
    }
    
    public ElementoSVG getPrototipo() {
        return elelemtoPrototipo;
    }
    
    public static ElementoSVG crearElemento(String nombre) {
        PrototipoElemento prototipo = null;
        try {
             prototipo = valueOf(nombre);
        } catch (IllegalArgumentException ex) {
            System.err.println("No de reconoce el elemento " + nombre);
        }
        if (prototipo == null) {
            return new ElementoNoIdentificado(nombre);
        }
        
        try {
            ElementoSVG elemento = (ElementoSVG) prototipo.getPrototipo().clone();
            return elemento;
        } catch (CloneNotSupportedException ex) {
            System.err.println("El elemento " + nombre + " no puede ser clonado");
            return null;
        }       
    }
}
